/**
 * 
 */
package co.com.sed.model.peers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;


import co.com.sed.model.beans.PreguntaEVC;
import co.com.sed.model.beans.SubCompetencia;
import co.com.sed.model.util.Util;

/**
 * @author derain gamez brito
 *
 */
public class PreguntaEVCPeer {
	
	private static final String BUSCAR_PREGUNTASEVC =
			"SELECT id_pregunta_evc, pregunta_EVC, id_sub_compet "+
			"FROM pregunta_EVC ";

	private static final String BUSCAR_PREGUNTAEVC =
			"SELECT id_pregunta_evc, pregunta_evc, id_sub_compet "+
			"FROM pregunta_evc "+
			"WHERE id_pregunta_evc = &id_preguntaEVC";
	
	private static final String BUSCAR_PREGUNTAEVC_POR_SUBCOMPETENCIA =
			"SELECT id_pregunta_evc, pregunta_EVC, id_sub_compet"+
			"FROM pregunta_EVC "+
			"WHERE id_sub_compet = &id_sub_compet";
	
	private static final String INSERTAR_PREGUNTAEVC =
			"INSERT INTO pregunta_EVC(pregunta_EVC, id_sub_compet) VALUES "+
			"('&preguntaEVC',&id_sub_compet)";
	
	private static final String ACTUALIZAR_PREGUNTAEVC =
			"UPDATE pregunta_EVC "+
			"SET pregunta_EVC = '&pregunta_EVC', id_sub_compet = &id_sub_compet"+ 
			"WHERE id_pregunta_evc = &id_preguntaEVC";
	
	private static final String ELIMINAR_PREGUNTAEVC =
			"DELETE FROM pregunta_EVC "+
			"WHERE id_pregunta_EVC = &id_pregunta_EVC";
	
	/** busca en la base de datos todos los registros de la tabla "preguntaEVC"
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	 * 
	 * @return					lista de preguntasEVC
	 * @see         			preguntaEVC, Statement
	 */
	public static ArrayList<PreguntaEVC> buscarPreguntasEVC(Statement stmt) {
		ArrayList<PreguntaEVC> preguntasEVC = new ArrayList<PreguntaEVC>();
		
		String sql = BUSCAR_PREGUNTASEVC;
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					PreguntaEVC pre = new PreguntaEVC();
					
					pre.setIdPreguntaEVC(rs.getInt("id_pregunta_360"));
					pre.setPreguntaEVC(rs.getString("pregunta_evc"));
					pre.setSubCompetencia(new SubCompetencia(rs.getInt("id_sub_compet")));
								
					preguntasEVC.add(pre);
					
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}
		
		return preguntasEVC;
	}
	
	
	/** busca en la base de datos un registro de la tabla "preguntaEVC"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* @param preguntaEVC		id de la EvaluacionEVC que se desea cosultar
	* 
	* @return					preguntaEVC buscado
	* @see         				preguntaEVC, Statement
	*/
	public static PreguntaEVC buscarPreguntaEVC(Statement stmt, int idPreguntaEVC) {
		PreguntaEVC pre = new PreguntaEVC();
		
		String sql = BUSCAR_PREGUNTAEVC;
		
		// se setean los "parametros" &id_pregunta_EVC,'&pregunta_EVC',&id_sub_compet
		sql = sql.replaceAll("&id_preguntaEVC", "" + idPreguntaEVC);
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				if (rs.next()) {
					pre.setIdPreguntaEVC(rs.getInt("id_pregunta_evc"));
					pre.setPreguntaEVC(rs.getString("pregunta_evc"));
					pre.setSubCompetencia(new SubCompetencia(rs.getInt("id_sub_compet")));
							
					
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:" + e.getMessage());
			e.printStackTrace();
		}
		
		return pre;
	}
	
	/** busca en la base de datos todos los registros de la tabla "PreguntaEVC" que pertenescan a una SubCompetencia
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* 
	* @return					lista de PreguntasEVC
	* @see         				PreguntaEVC, Statement
	*/
	public static ArrayList<PreguntaEVC> buscarPreguntaPorSubCompetencia(Statement stmt, int idSubCompetencia) {
		ArrayList<PreguntaEVC> preguntasevc = new ArrayList<PreguntaEVC>();

		String sql = BUSCAR_PREGUNTAEVC_POR_SUBCOMPETENCIA;

		// se setean los "parametros"
		sql = sql.replaceAll("&subCompetencia", "" + idSubCompetencia);
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					PreguntaEVC pevc = new PreguntaEVC();
					
					pevc.setIdPreguntaEVC(rs.getInt("id_pregunta_EVC"));
					pevc.setPreguntaEVC(rs.getString("preguntaEVC"));
					pevc.setSubCompetencia(new SubCompetencia(rs.getInt("id_sub_compet")));
											
					preguntasevc.add(pevc);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return preguntasevc;
	}
	
	
	/** Inserta un Tipo de preguntaEVC en la base de datos
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	* @param preguntaEVC		evaluacion360 que se va a insertar en la base de datos
	* 
	* @return					void
	* @throws SQLException		si ocurre un error al insertar el registro en la base de datos
	* 
	* @see         			DataManager
	*/
	public static int insertarPreguntaEVC(Statement stmt, PreguntaEVC preguntaEVC) throws SQLException {
		int idNuevaPreguntaEVC = -1;
		ResultSet rs = null;
		
		try {
			String sql = INSERTAR_PREGUNTAEVC;
			 //se setean los "parametros": &id_calificacion, &cualitativa, &cuantitativa, &descripcion 
			sql = sql.replaceAll("&preguntaEVC", ""+ preguntaEVC.getPreguntaEVC())	
					 .replaceAll("&id_sub_compet", ""+ preguntaEVC.getSubCompetencia().getIdSubCompetencia());
			
			stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
			
			rs = stmt.getGeneratedKeys();
			if (rs.next()) {
				idNuevaPreguntaEVC = rs.getInt("id_preguntaEVC");
				Util.print("nuevo registro: " + idNuevaPreguntaEVC);
			}
		} finally {
			rs.close();
		}
		
		return idNuevaPreguntaEVC;
	}
		
	
	/** Actualiza un preguntaEVC en la base de datos
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	* @param preguntaEVC		evaluacion360 que se va a actualizar en la base de datos
	* 
	* @return					void
	* @throws SQLException		si ocurre un error al actualizar el registro en la base de datos
	* 
	* @see         			DataManager
	*/
	public static void actualizarPreguntaEVC(Statement stmt, PreguntaEVC preguntaEVC) throws SQLException {
		String sql = ACTUALIZAR_PREGUNTAEVC;
		// se setean los "parametros": &id_evaluacion_360, &fecha_asig, &estado, &identificacion, &periodo_evaluado
		sql = sql.replaceAll("&id_pregunta_EVC", ""+ preguntaEVC.getIdPreguntaEVC())
		 		.replaceAll("&preguntaEVC", ""+ preguntaEVC.getPreguntaEVC())	
		 		.replaceAll("&id_sub_compet", ""+ preguntaEVC.getSubCompetencia().getIdSubCompetencia());
	
		stmt.executeUpdate(sql);
	}
	
	/** Elimina un Cargo en la base de datos
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	* @param preguntaEVC		evaluacion360 que se va a eliminar en la base de datos
	* 
	* @return					void
	* @throws SQLException		si ocurre un error al eliminar el registro en la base de datos
	* 
	* @see         			DataManager
	*/
	public static void eliminarPreguntaEVC(Statement stmt, PreguntaEVC preguntaEVC) throws SQLException {
	String sql = ELIMINAR_PREGUNTAEVC;
	// se setean los "parametros": &id_evaluacion_360
	sql = sql.replaceAll("&id_pregunta_EVC", "" + preguntaEVC.getIdPreguntaEVC());
	
	stmt.executeUpdate(sql);
	}

}